home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 476-500 / disk_481 / wavemaker / sound.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  83 lines

  1. #include <exec/types.h>
  2. #include <devices/audio.h>
  3.  
  4. #define NO  0
  5. #define YES 1
  6.  
  7. extern struct IOAudio *ioa,*audchan[4],*finish[4];
  8. extern SHORT audiochan[128];
  9. extern SHORT waiting[5];
  10. /************************************************************/
  11. VOID SoundOn(SHORT key,UBYTE *ws)
  12.  
  13. /*  Start a sound channel   */
  14.  
  15. {
  16.     UWORD tone;
  17.     UWORD periods[16]={452, 428, 404, 381, 359, 339, 320, 302,
  18.                    285, 269, 254, 240, 226, 214, 202, 190};
  19.     SHORT channo,FreeChan();
  20.     
  21.     switch (key)
  22.     {
  23.         case 0x31: {tone=periods[0]; break;}
  24.         case 0x32: {tone=periods[1]; break;}
  25.         case 0x22: {tone=periods[2]; break;}
  26.         case 0x33: {tone=periods[3]; break;}
  27.         case 0x23: {tone=periods[4]; break;}
  28.         case 0x34: {tone=periods[5]; break;}
  29.         case 0x35: {tone=periods[6]; break;}
  30.         case 0x25: {tone=periods[7]; break;}
  31.         case 0x36: {tone=periods[8]; break;}
  32.         case 0x26: {tone=periods[9]; break;}
  33.         case 0x37: {tone=periods[10]; break;}
  34.         case 0x27: {tone=periods[11]; break;}
  35.         case 0x38: {tone=periods[12]; break;}
  36.         case 0x39: {tone=periods[13]; break;}
  37.         case 0x29: {tone=periods[14]; break;}
  38.         case 0x3A: {tone=periods[15]; break;}
  39.         default: tone=0;
  40.     }
  41.     if (((channo = FreeChan())<4)&(key<64))
  42.     {
  43.         audchan[channo]->ioa_Period=tone;
  44.         if(tone==0) audchan[channo]->ioa_Volume=0;
  45.         else audchan[channo]->ioa_Volume=64;
  46.         audchan[channo]->ioa_Data=(UBYTE *)ws;
  47.         audiochan[key]=channo;
  48.         WaitIO(audchan[channo]);
  49.         BeginIO(audchan[channo]);
  50.     }
  51. }
  52.  
  53. /************************************************************/
  54. VOID SoundOff(SHORT key)
  55.  
  56. /*  Stop a sound channel  */
  57.  
  58. {
  59.     SHORT channo;
  60.     
  61.     channo = audiochan[key];
  62.     audiochan[key]=-1;
  63.     if ((channo>=0)&(key<64))
  64.     {
  65.         BeginIO(finish[channo]);
  66.         WaitIO(finish[channo]);
  67.         waiting[channo]=NO;
  68.     }
  69. }
  70.  
  71. /************************************************************/
  72. SHORT FreeChan()
  73.  
  74. /*  Finds the first unused audio channel */
  75. {
  76.     SHORT i;
  77.     
  78.     i=0;
  79.     while ((waiting[i]==YES)&&(i<4)) i++;
  80.     waiting[i]=YES;
  81.     return(i);
  82. }
  83.